class Comment < ActiveRecord::Base
  ITEMS_PER_PAGE = 10
  RFC822EmailAddress = begin
    qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
    dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'
    atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' +
      '\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'
    quoted_pair = '\\x5c[\\x00-\\x7f]'
    domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d"
    quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22"
    domain_ref = atom
    sub_domain = "(?:#{domain_ref}|#{domain_literal})"
    word = "(?:#{atom}|#{quoted_string})"
    domain = "#{sub_domain}(?:\\x2e#{sub_domain})*"
    local_part = "#{word}(?:\\x2e#{word})*"
    /\A(#{local_part})\x40(#{domain})\Z/
  end

  belongs_to :commentable, :polymorphic => true

  validates_length_of :body,
    :within => 1..500,
    :too_long => "Your comment is too long.",
    :too_short => "Your comment is too short."
  validates_format_of :email,
    :with => RFC822EmailAddress,
    :message => "The email address is not valid",
    :allow_blank => true,
    :allow_nil => true
  
  def self.get_items(count = ITEMS_PER_PAGE, page = nil)
    page = page.to_i
    find(
      :all,
      :conditions => {
        :published  => true
      },
      :limit      => count,
      :offset     => count * page,
      :order      => "created_at DESC"
    )
  end
  
  def hide
    self.published = 0
    self.save
  end
end
